package org.springframework.security.access;

import org.springframework.security.authentication.InsufficientAuthenticationException;
import org.springframework.security.core.Authentication;

import java.util.Collection;

/**
 * @author Dillon
 * @date 2024/6/26
 * @slogan 致敬大师 致敬未来的你
 * @desc 授权决策器，用户决定是否允许用户访问
 * @see AccessDecisionVoter 与 AccessDecisionManager 关系相当于
 * AuthenticationProvider 与 ProviderManager一样
 */
@Deprecated
public interface AccessDecisionManager {

	/**
	 * 执行决策，当前请求是否有权限访问
	 *
	 * @param authentication   认证主体
	 * @param object           请求访问包装
	 * @param configAttributes 当前请求所具有的权限
	 * @throws AccessDeniedException               权限校验异常
	 * @throws InsufficientAuthenticationException 执行异常
	 */
	void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes)
			throws AccessDeniedException, InsufficientAuthenticationException;

	/**
	 * 决策器是否支持当前权限
	 *
	 * @param attribute 权限封装
	 * @return
	 */
	boolean supports(ConfigAttribute attribute);

	/**
	 * 决策器是否支持当前权限
	 *
	 * @param clazz 请求类
	 * @return
	 */
	boolean supports(Class<?> clazz);

}
